// name 和 age 虽然没有使用属性描述符来定义， 但是它们也是具有相应的特性
// value: 赋值的 value
// configurable: true
// enumberable: true
// writable: true
var obj = {
  name: "why",
  age: 18
}

// 数据属性描述符
// 用了属性描述符，会有默认的特性
Object.defineProperty(obj, "address", {
  // value: "北京市", // 默认值 undefined
  
  // 该特性是属性(address)不可删除/也不可以重新定义属性描述符
  // configurable: false, // 默认值 false

  // 该特性是属性(address)是否可以枚举
  // enumberable: false, // 默认值 false

  // 该特性是属性(address)是否可以赋值(写入值)
  // writable: false, // 默认值 false
})

// 测试 configurable 的作用
// delete obj.name
// console.log(obj.name)
// delete obj.address
// console.log(obj.address)

// 测试 enumberable 的作用
// console.log(obj)
// for (var key in obj) {
//   console.log(key)
// }
// console.log(Object.keys(obj))

// 测试 writable 的作用
// obj.address = '广州市'
// console.log(obj.address)